using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// 控制一组按钮的图片，确保只有一个按钮显示“点击”状态的图片，其余按钮显示“未点击”状态的图片。
/// </summary>
public class ButtonSpriteController : MonoBehaviour
{
    /// <summary>
    /// 需要管理图片的按钮数组（在 Inspector 面板中赋值）。
    /// </summary>
    public Button[] buttons;

    /// <summary>
    /// 按钮点击后的图片数组（每个按钮对应一张点击状态的图片）。
    /// </summary>
    public Sprite[] clickedSprites;

    /// <summary>
    /// 按钮未点击时的图片数组（每个按钮对应一张未点击状态的图片）。
    /// </summary>
    public Sprite[] unclickedSprites;

    private void Start()
    {
        if (buttons == null || buttons.Length == 0)
        {
            Debug.LogWarning("ButtonColorController: 未分配按钮数组！");
            return;
        }

        if (buttons.Length != clickedSprites.Length || buttons.Length != unclickedSprites.Length)
        {
            Debug.LogError("ButtonSpriteController: 按钮数组和图片数组长度不匹配！");
            return;
        }

        // 初始化按钮状态，第一个按钮为点击状态，其他为未点击状态
        for (int i = 0; i < buttons.Length; i++)
        {
            if (clickedSprites[i] == null || unclickedSprites[i] == null)
            {
                Debug.LogWarning($"ButtonSpriteController: 按钮 {i} 的图片未设置！");
                continue;
            }

            if (i == 0)
            {
                SetButtonSprite(buttons[i], clickedSprites[i]);
            }
            else
            {
                SetButtonSprite(buttons[i], unclickedSprites[i]);
            }

            // 避免闭包问题，使用局部变量 index
            int index = i;

            // 绑定按钮点击事件
            buttons[i].onClick.AddListener(() => OnButtonClick(index));
        }
    }

    /// <summary>
    /// 按钮点击事件：重置所有按钮图片，并将当前点击的按钮设为“点击”状态。
    /// </summary>
    /// <param name="buttonIndex">被点击的按钮索引</param>
    private void OnButtonClick(int buttonIndex)
    {
        // 先将所有按钮设置为未点击状态
        for (int i = 0; i < buttons.Length; i++)
        {
            SetButtonSprite(buttons[i], unclickedSprites[i]);
        }

        // 再将当前点击的按钮设置为点击状态
        SetButtonSprite(buttons[buttonIndex], clickedSprites[buttonIndex]);
    }

    /// <summary>
    /// 设置按钮的图片
    /// </summary>
    /// <param name="button">目标按钮</param>
    /// <param name="sprite">要设置的图片</param>
    private void SetButtonSprite(Button button, Sprite sprite)
    {
        // 获取按钮的 Image 组件
        Image image = button.GetComponent<Image>();
        if (image != null)
        {
            // 设置 Image 组件的 Sprite
            image.sprite = sprite;
        }
    }
}
